package br.com.sge.dao;

import br.com.sge.modelo.Professor;

import javax.persistence.EntityManager;
import javax.persistence.TypedQuery;
/**
 *
 * @author almeida
 */
public class ProfessorDAO {
   
    private String nome;
	private TypedQuery<Professor> consultarProf;
	private String erroConsulta ="Houve um erro na consulta nos filtros ";
    EntityManager gerente = new Conexao().obterConexao();
    
    @SuppressWarnings("unchecked")
	public TypedQuery<Professor> buscarTodos(String ordem)
	{
		
		try
		{
			String consulta = "select p from PROFESSOR as p order by p.nome "+ordem;
			consultarProf = (TypedQuery<Professor>) gerente.createNativeQuery(consulta,Professor.class);
		}
		catch(Exception e){
			String erroBd = this.erroConsulta+"nome no Banco de Dados!!!\n";
			System.out.println(erroBd);
			e.printStackTrace();
		}
		return consultarProf;
		
		
	}
	@SuppressWarnings("unchecked")
	public TypedQuery<Professor> buscarProfessores(String nome,String ordem)
	{
		
		try
		{
			String consulta ="select * from PROFESSOR as p where p.nome like '%"+nome+"%' order by p.nome "+ordem;
			consultarProf = (TypedQuery<Professor>) gerente.createNativeQuery(consulta,Professor.class);
			
		}
		catch(Exception e){
			String erroBd = this.erroConsulta+"nome no Banco de Dados!!!\n";
			System.out.println(erroBd);
			e.printStackTrace();
		}
		return consultarProf;
		
		
	}
	@SuppressWarnings("unchecked")
	public TypedQuery<Professor> buscarProfessor(int id)
	{
		try
		{
			String consulta="select * from PROFESSOR as p where p.id= "+id+"";
			this.consultarProf = (TypedQuery<Professor>) gerente.createNativeQuery(consulta,Professor.class);
			this.consultarProf.setParameter("id", id);
		}
		catch(Exception e){
			String erroBd = erroConsulta+"id no Banco de Dados!!!\n";
			System.out.println(erroBd);
			e.printStackTrace();
		}
		return consultarProf;
	}
	public String getNome() {
		return nome;
	}
	public void setNome(String nome) {
		this.nome = nome;
	}

	@SuppressWarnings("unchecked")
	public TypedQuery<Professor> buscarProfessor(String login,String senha)
        {
		try
		{
			String consulta = "select p.id,p.nome,p.login from PROFESSOR as p where p.login='"+login+"' and p.senha='"+senha+"'";
			consultarProf = (TypedQuery<Professor>) gerente.createNativeQuery(consulta,Professor.class);
		}
		catch(Exception e){
			String erroBd = erroConsulta+"login e senha no Banco de Dados!!!\n";
			System.out.println(erroBd);
			e.printStackTrace();
		}
		return consultarProf;
	}
	public void salvarProfessor(Professor prof)
	{
            try
		{
			gerente.getTransaction().begin();
			gerente.persist(prof);
			gerente.getTransaction().commit();
			System.out.println("\nProfessor registrado com �xito!!!\n");
		}
		catch(RuntimeException erroBd)
		{
			gerente.getTransaction().rollback();
			String erroGra ="Houve um erro na inserção do Professor no Banco de Dados!!!\n";
			System.out.println(erroGra);
			erroBd.printStackTrace();
			gerente.close();
		}
		finally
		{
			gerente.close();
		}
		
	}

	public void alterarProfessor(Professor func) 
        {
		try
		{
			gerente.getTransaction().begin();
			gerente.merge(func);
			gerente.getTransaction().commit();
		}
		catch(RuntimeException erroBd)
		{
			gerente.getTransaction().rollback();
			String erroGra ="Houve um erro na atualização do Professor no Banco de Dados!!!\n";
			System.out.println(erroGra);
			erroBd.printStackTrace();
		}
		finally
		{
			gerente.close();
		}
		
	}

	public TypedQuery<Professor> buscarProfessores() {
		
		try
		{
			String consulta ="SELECT p FROM Professor p";
			this.consultarProf = gerente.createQuery(consulta,Professor.class);
			
		}
		catch(Exception e)
		{
			String erroBd = erroConsulta+" de Professores no Banco de Dados!!!\n";
			System.out.println(erroBd);
			e.printStackTrace();
		}
		
		return this.consultarProf;
	}

	public TypedQuery<Professor> buscarProfessor(String nome, int id)
	{
		
		try
		{
			String consulta = "select p from Professor p where p.nome like:nome or p.id =:id";
			consultarProf = gerente.createQuery(consulta,Professor.class);
			consultarProf.setParameter("nome",nome);
			consultarProf.setParameter("id", id);
			
		}
		catch(Exception e){
			String erroBd = erroConsulta+"nome e id no Banco de Dados!!!\n";
			System.out.println(erroBd);
			e.printStackTrace();
			gerente.close();
		}
		return this.consultarProf;
	}

	

}
    
